#  结合GUI界面，开发一个简易照片处理软件---
#  简易版图片处理  --软件界面自行设计

 # 要求
 #  把涉及的功能定义成函数
 # 至少实现以下功能：
#  大小调整、裁剪、旋转、叠加图片
#  增强颜色、滤镜、增强图像等功能
#  简单应用
#  结合 Thinker 界面化处理
 #  类似功能可以用下拉控制条实现
 # 功能实现为主、美观度为辅
 
from PIL import Image

im = Image.open('girl.jpg')
im.show() #显示图片

print(type(im))
print(im.format,im.size,im.mode) #读取图片的格式、大小、形式

w,h = im.size #读取图片大小

# 缩略图
im_copy = im.copy()
im_copy.save('a.jpg') # 复制、粘贴

im_copy.show()

im_a = Image.open('a.jpg')
im_a.thumbnail((w//10,h//10)) #把图片缩小为原来的10倍
im_a.show()

#保存缩略图
im_a.save('sl_a.jpg')

# 调整大小 -- 等比例
im_size = im_a.resize((w//4,h//4)) #重新定义图片的大小
im_size.show()

# 自由裁剪大小
box = (780,600,1200,1000)  # 截图的开始、结束坐标1200-780=420,1000-600=400
region = im_copy.crop(box) #crop裁剪
region.show()
region.save('cj_a.jpg')

# 水平旋转
im_copy.rotate(180).save('sz_a.jpg')

# 镜像翻转
im_copy.transpose(Image.FLIP_LEFT_RIGHT).save('jxzy_a.jpg') #左右
im_copy.transpose(Image.FLIP_TOP_BOTTOM).save('jxsx_a.jpg') #上下

# 叠加---添加logo、水印
im_log = Image.open('store.jpg')
lw,lh = im_log.size

im_log_copy = im_log.copy()
im_log_copy.thumbnail((lw//10,lh//10))

im_copy.paste(im_log_copy)
im_copy.show()
im_copy.save('tjsy_a.jpg')

## 高级功能

# 1、增强颜色
from PIL import ImageEnhance as ie
enh = ie.Contrast(im_copy)
enh.enhance(1.5).show()  # 增强 50% 对比度

# 2、 平滑
from PIL import ImageFilter #导入图像滤波器
im_a1 = Image.open('a.jpg')
im_a1.filter(ImageFilter.GaussianBlur(radius=2)).show() #高斯模糊

# 3、 锐化
im_a1.filter(ImageFilter.EDGE_ENHANCE).show() #边缘强化，也有锐化效果
im_a1.filter(ImageFilter.UnsharpMask(radius=2, percent=150, threshold=3)).show() #锐化遮罩
#radius半径  percent比例  threshold边界，阈值

# 4、 颜色分层
import numpy as np
from  skimage import io
#第一种方法，二值映射
img = io.imread('a.jpg')
def slice_a(img):
    h,w = img.shape[0],img.shape[1]
    new_img = np.zeros((h,w))
    for i in range(h):
        for j in range(w):
            if img[i,j] <190 or img[i,j]>230:
                new_img[i,j] = 0
            else:
                new_img[i,j] = 255
    return new_img
img = slice_a(img[:,:,0])
io.imshow(img)

# 5、 调整gamma值  --25页
from skimage import data,io,exposure
from matplotlib import pyplot as plt
#读入图像
image = io.imread('a.jpg')
#分别计算gamma = 0.2,0.67,25时的图像
image_1 = exposure.adjust_log(image,0.2)
image_2 = exposure.adjust_log(image,0.67)
image_3 = exposure.adjust_log(image,25)
#分别展示原图及结果图像
plt.subplot(2,2,1)
plt.title('log = 1')
io.imshow(image)

plt.subplot(2,2,2)
plt.title('log = 0.2')
io.imshow(image_1)

plt.subplot(2,2,3)
plt.title('log = 0.67')
io.imshow(image_2)

plt.subplot(2,2,4)
plt.title('log = 25')
io.imshow(image_3)
plt.show()

# 6、 转换成灰度图
from skimage import color,io
from matplotlib import pyplot as plt
img = io.imread('a.jpg')
grayimg = color.rgb2gray(img) #将彩色图像转换为灰度图像
plt.axis('off') #去掉坐标轴
#plt.imshow(grayimg,cmap = 'gray') #显示灰度图像 
io.imshow(grayimg)

# 7、 （rgb\hsi)分割

# 8、 滤波处理（傅里叶变换）





